/*
 * @Descripttion:
 * @version:
 * @Author: YouHuJun
 * @Date: 2021-05-23 15:19:35
 * @LastEditors: YouHuJun
 * @LastEditTime: 2021-05-29 16:46:46
 */
/**
 * @param {string} url
 * @returns {Object}
 */
function param2Obj(url)
{
  const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
  if (!search)
  {
    return {}
  }
  const obj = {}
  const searchArr = search.split('&')
  searchArr.forEach(v =>
  {
    const index = v.indexOf('=')
    if (index !== -1)
    {
      const name = v.substring(0, index)
      const val = v.substring(index + 1, v.length)
      obj[name] = val
    }
  })
  return obj
}

/**
 * This is just a simple version of deep copy
 * Has a lot of edge cases bug
 * If you want to use a perfect deep copy, use lodash's _.cloneDeep
 * @param {Object} source
 * @returns {Object}
 */
function deepClone(source)
{
  if (!source && typeof source !== 'object')
  {
    throw new Error('error arguments', 'deepClone')
  }
  const targetObj = source.constructor === Array ? [] : {}
  Object.keys(source).forEach(keys =>
  {
    if (source[keys] && typeof source[keys] === 'object')
    {
      targetObj[keys] = deepClone(source[keys])
    }
    else
    {
      targetObj[keys] = source[keys]
    }
  })
  return targetObj
}

module.exports = {
  param2Obj,
  deepClone
}
